package com.sybil.spa.dominio;

import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(name = "SPA_RESPONSABLES_PASO_FLUJO")
public class Responsable implements Serializable {

   private static final long serialVersionUID = 1L;
   protected ResponsablePK llave;
   private String forzoso;
   private String recibeCopia;
   private String esAprobador;
   private String ultimoAprueba;
   private String usuarioCreo;
   private String usuarioModif;
   private Usuario usuario;
   private Paso paso;

   public Responsable() {
   }

   public Responsable(ResponsablePK responsablePK) {
      this.llave = responsablePK;
   }

   public Responsable(Usuario usuario) {
      this.usuario = usuario;
   }

   public Responsable(ResponsablePK llave, String forzoso, String recibeCopia,
           String esAprobador, String ultimoAprueba, String usuarioCreo) {
      this.llave = llave;
      this.forzoso = forzoso;
      this.recibeCopia = recibeCopia;
      this.esAprobador = esAprobador;
      this.ultimoAprueba = ultimoAprueba;
      this.usuarioCreo = usuarioCreo;
   }

   public Responsable(String repfFlujClave, String repfPaflClave, String repfUsuarioAd) {
      this.llave = new ResponsablePK(repfFlujClave, repfPaflClave, repfUsuarioAd);
   }

   @EmbeddedId
   public ResponsablePK getLlave() {
      return llave;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "REPF_FORZOSO")
   public String getForzoso() {
      return forzoso;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "REPF_RECIBE_COPIA")
   public String getRecibeCopia() {
      return recibeCopia;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "REPF_ES_APROBADOR")
   public String getEsAprobador() {
      return esAprobador;
   }

   @Basic(optional = false)
   @NotNull
   @Size(min = 1, max = 1)
   @Column(name = "REPF_ULTIMO_APRUEBA")
   public String getUltimoAprueba() {
      return ultimoAprueba;
   }

   @Basic(optional = false)
   @Column(name = "REPF_USUARIO_CREO")
   public String getUsuarioCreo() {
      return usuarioCreo;
   }

   @Column(name = "REPF_USUARIO_MODIF")
   public String getUsuarioModif() {
      return usuarioModif;
   }

   @JoinColumns({
      @JoinColumn(name = "REPF_FLUJ_CLAVE", referencedColumnName = "PAFL_FLUJ_CLAVE", insertable = false, updatable = false),
      @JoinColumn(name = "REPF_PAFL_CLAVE", referencedColumnName = "PAFL_CLAVE", insertable = false, updatable = false)})
   @ManyToOne(optional = false)
   public Paso getPaso() {
      return paso;
   }

   @Transient
   public Usuario getUsuario() {
      return usuario;
   }

   public void setUsuario(Usuario usuario) {
      this.usuario = usuario;
   }

   public void setLlave(ResponsablePK llave) {
      this.llave = llave;
   }

   public void setForzoso(String forzoso) {
      this.forzoso = forzoso;
   }

   public void setRecibeCopia(String recibeCopia) {
      this.recibeCopia = recibeCopia;
   }

   public void setEsAprobador(String esAprobador) {
      this.esAprobador = esAprobador;
   }

   public void setUltimoAprueba(String ultimoAprueba) {
      this.ultimoAprueba = ultimoAprueba;
   }

   public void setUsuarioCreo(String usuarioCreo) {
      this.usuarioCreo = usuarioCreo;
   }

   public void setUsuarioModif(String usuarioModif) {
      this.usuarioModif = usuarioModif;
   }

   public void setPaso(Paso paso) {
      this.paso = paso;
   }

   @Override
   public int hashCode() {
      int hash = 0;
      hash += (llave != null ? llave.hashCode() : 0);
      return hash;
   }

   @Override
   public boolean equals(Object object) {
      if (!(object instanceof Responsable)) {
         return false;
      }
      Responsable other = (Responsable) object;
      if ((this.llave == null && other.llave != null) || (this.llave != null && !this.llave.equals(other.llave))) {
         return false;
      }
      return true;
   }

   @Override
   public String toString() {
      return "Responsable[ llave=" + llave + " ]";
   }
}
